package x.ovo.wechat.bot.plugin;

import lombok.NonNull;
import x.ovo.wechat.bot.core.contact.Contactable;
import x.ovo.wechat.bot.core.event.EventListener;
import x.ovo.wechat.bot.core.event.MessageEvent;
import x.ovo.wechat.bot.core.message.TextMessage;
import x.ovo.wechat.bot.core.plugin.Plugin;
import x.ovo.wechat.bot.core.util.WechatUtil;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

public class RereadListener extends EventListener<MessageEvent<TextMessage>, TextMessage> {

    private static final Map<String, String> map = new HashMap<>(16);
    private static final Map<String, String> flagMap = new HashMap<>(16);

    public RereadListener(Plugin plugin) {
        super(plugin);
    }

    @Override
    public boolean support(@NonNull MessageEvent<TextMessage> event, TextMessage source) {
        return true;
    }

    @Override
    public boolean onEvent(@NonNull MessageEvent<TextMessage> event, TextMessage source) {
        // 获取消息对象，并判断是否为群消息，如果不是则不处理
        if (!source.isGroup()) return false;

        // 获取消息发送者信息、接收者名称以及消息内容
        Contactable from = source.getFrom();
        String content = source.getContent();

        // 检查消息内容是否与之前收到的相同，且不与标记内容相同。如果满足条件，则将该内容标记，并向发送者回复相同内容。
        if (Objects.equals(content, map.get(from.getNickName())) && !Objects.equals(content, flagMap.get(from.getNickName()))) {
            flagMap.put(from.getNickName(), content);
            this.context.getApi().sendText(from.getUserName(), WechatUtil.format(content));
            return true;
        }
        // 更新接收到的消息内容到 map 中
        map.put(from.getNickName(), content);
        return false;
    }
}
